Dans les leçons précédentes, nous avons concentré notre attention sur opérations élément par élément (comme une fonction ReLU de base sur une matrice). Elles sont limitées par la mémoire car la GPU passe plus de temps à déplacer les données depuis la mémoire HBM vers les registres qu'à effectuer des calculs.
1. Pourquoi le GEMM est central
La multiplication matricielle générale (GEMM) présente une complexité computationnelle de $O(N^3)$ tout en n'exigeant que $O(N^2)$ accès mémoire. Cela nous permet de masquer la latence mémoire derrière un débit arithmétique massif, en faisant du GEMM le « cœur » des modèles de langage à grande échelle (LLM).
2. Représentation mémoire en 2D
La mémoire physique est à 1 dimension. Pour représenter un tenseur en 2D, nous utilisons pas. Une erreur courante en production est de supposer qu'un tenseur est contigu. Si vous confondez les pas des lignes et des colonnes dans vos calculs d'adressage, vous accéderez à des données fantômes ou déclencherez des violations de mémoire.
3. Généralisation par tuiles
Triton généralise la logique élément par élément en passant de des pointeurs simples à des blocs de pointeurs. En utilisant des tuiles 2D (par exemple, $16 \times 16$), nous exploitions la réutilisation des données dans la SRAM haute vitesse, en maintenant les données « chaudes » pour des opérations fusionnées comme l'addition du biais ou les activations avant de les écrire de retour en mémoire globale.